home *** CD-ROM | disk | FTP | other *** search
/ PC Elektro 3 / PC-Elektro-3-cd1.bin / KBan 2.0 / KBANSRC.LZH / SRC / PROG / CMD / DLLINE.CPP < prev    next >
Encoding:
C/C++ Source or Header  |  1997-08-17  |  2.5 KB  |  98 lines

  1. /*
  2.  * the class DELETE_LINE
  3.  * Copyright (C) 1996, 1997 Kazutaka Hirata <khirata@jove.acs.unt.edu>
  4.  */
  5.  
  6. #include "../stdafx.h"
  7.  
  8. #include "../common/bool.h"
  9.  
  10. #include "dlline.h"
  11.  
  12. STAGE *DELETE_LINE::init_new(KBAN_INFO& /* info */, KBAN_DRAW& /* draw */)
  13. {
  14.   return new STAGE_SELECT;
  15. }
  16.  
  17. const char *DELETE_LINE::get_name(void)
  18. {
  19.   return "Delete:Line";
  20. }
  21.  
  22. STAGE *DELETE_LINE::STAGE_SELECT::mouse_left_up(KBAN_INFO& info, KBAN_DRAW& /* draw */, const XY& pc, UINT /* nFlags */)
  23. {
  24.   PRIMITIVE &primitive = info.kban_data().primitive();
  25.   uint layer = info.active_layer().get();
  26.   LINE_LIST &line_list = primitive.layer(layer).line_list();
  27.  
  28.   XY ac;
  29.   GRID &grid = info.grid();
  30.   grid.xy_pc2ac_with_snap_off(pc, ac);
  31.  
  32.   LINE_ELEMENT *target = NULL;
  33.   for(uint i = 0; i < 5; i++) {
  34.     XYT eps = grid.distance_pc2ac(10 * i);
  35.     target = line_list.search(eps, ac);
  36.     if(target != NULL) {
  37.       break;
  38.     }
  39.   }
  40.  
  41.   STAGE *ret;
  42.   if(target != NULL) {
  43.     ret = new STAGE_CONFIRM(layer, target);
  44.   } else {
  45.     ret = this;
  46.   }
  47.   return ret;
  48. }
  49.  
  50. STAGE *DELETE_LINE::STAGE_SELECT::mouse_right_up(KBAN_INFO& /* info */, KBAN_DRAW& /* draw */, const XY& /* pc */, UINT /* nFlags */)
  51. {
  52.   return NULL;
  53. }
  54.  
  55. DELETE_LINE::STAGE_CONFIRM::STAGE_CONFIRM(uint layer, LINE_ELEMENT* target)
  56.   : m_done(0),
  57.     m_old_active_layer(layer),
  58.     m_target(target) {}
  59.  
  60. STAGE *DELETE_LINE::STAGE_CONFIRM::init(KBAN_INFO& /* info */, KBAN_DRAW& draw)
  61. {
  62.   draw.draw_primitive_line_target(*m_target);
  63.   return this;
  64. }
  65.  
  66. STAGE *DELETE_LINE::STAGE_CONFIRM::redraw(KBAN_INFO& /* info */, KBAN_DRAW& draw)
  67. {
  68.   draw.draw_primitive_line_target(*m_target);
  69.   return this;
  70. }
  71.  
  72. STAGE *DELETE_LINE::STAGE_CONFIRM::mouse_left_up(KBAN_INFO& info, KBAN_DRAW& draw, const XY& /* pc */, UINT /* nFlags */)
  73. {
  74.   PRIMITIVE &primitive = info.kban_data().primitive();
  75.   LINE_LIST &line_list = primitive.layer(m_old_active_layer).line_list();
  76.  
  77.   draw.erase_primitive_line(*m_target);
  78.   line_list.delete_one(m_target);
  79.   info.SetModifiedFlag();
  80.   info.new_state().set(true);
  81.   info.new_state_str() = "Delete Line";
  82.  
  83.   m_done.set(TRUE);
  84.   return new STAGE_SELECT;
  85. }
  86.  
  87. STAGE *DELETE_LINE::STAGE_CONFIRM::mouse_right_up(KBAN_INFO& /* info */, KBAN_DRAW& /* draw */, const XY& /* pc */, UINT /* nFlags */)
  88. {
  89.   return new STAGE_SELECT;
  90. }
  91.  
  92. void DELETE_LINE::STAGE_CONFIRM::end(KBAN_INFO& /* info */, KBAN_DRAW& draw)
  93. {
  94.   if(!m_done.get()) {
  95.     draw.draw_primitive_line(*m_target, m_old_active_layer);
  96.   }
  97. }
  98.